package br.com.empresa.controller;

import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;

import br.com.empresa.app.Principal;
import br.com.empresa.dao.ProdutoDAO;
import br.com.empresa.modelo.Produto;
import br.com.empresa.modelo.TabelaProduto;
import javafx.beans.property.IntegerProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;

public class ProdutoController implements Initializable{

	@FXML
    private ComboBox cbCategoria;

    @FXML
    private TextField txCodigoBarras;

    @FXML
    private TextField txDescricao;

    @FXML
    private Button btExcluir;

    @FXML
    private TableColumn clDescricao;

    @FXML
    private TextField txCodigo;

    @FXML
    private Button btSalvar;

    @FXML
    private TableView<TabelaProduto> tabelaProd;

    @FXML
    private Button btLimpar;

    @FXML
    private TableColumn clCodigo;

    @FXML
    private TableColumn clCategoria;

    @FXML
    private TableColumn clPreco;
    
    @FXML
    private Button btEditar;

    @FXML
    private TableColumn clCodigoBarras;

    @FXML
    private TextField txPreco;

    @FXML
    private TextField txSearch;

    @FXML
    private Button btVoltar;
    
    @FXML
    void limpar(ActionEvent event) {
    	limparDados();
    }

    @FXML
    void salvar(ActionEvent event) {
    	Produto p = new Produto();
    	
    	p.setDescricao(txDescricao.getText());
    	p.setCodigoBarras(txCodigoBarras.getText());
    	p.setCategoria(cbCategoria.getValue().toString());
    	p.setPreco(Double.parseDouble(txPreco.getText()));
    	
    	ProdutoDAO dao = new ProdutoDAO();
    	
    	if(!txCodigo.getText().trim().equals("")){
    		p.setCodigo(Integer.parseInt(txCodigo.getText()));
    		dao.editar(p);
    	}else{
    		dao.inserir(p);
    	}
    	listarDados();
    	limparDados();
    }

    private void limparDados() {
    	txCodigo.setText("");
		txDescricao.setText("");
    	txCodigoBarras.setText("");
    	cbCategoria.setPromptText("");;
    	txPreco.setText("");
	}
    
    @FXML
    void Editar(ActionEvent event) {
    	IntegerProperty codProduto = tabelaProd.getSelectionModel().getSelectedItem().codigoProperty();
    	
    	ProdutoDAO dao = new ProdutoDAO();
    	Produto psalvo = dao.getById(codProduto.intValue());
    	
    	txDescricao.setText(psalvo.getDescricao());
    	txCodigoBarras.setText(psalvo.getCodigoBarras());
   // 	cbCategoria.setText(psalvo.getCategoria());
//    	txPreco.setText(psalvo.getPreco());
    }

    @FXML
    void Excluir(ActionEvent event) {
    	int linhaSelecionada = tabelaProd.getSelectionModel().getSelectedIndex();
    	IntegerProperty codProduto = tabelaProd.getSelectionModel().getSelectedItem().codigoProperty();
    	ProdutoDAO dao = new ProdutoDAO();
    	dao.excluir(codProduto.intValue());
    	tabelaProd.getItems().remove(linhaSelecionada);
    }

    @FXML
    void pesquisar(ActionEvent event) {
    	ProdutoDAO dao = new ProdutoDAO();
		List<Produto> listaProdutos = dao.pesquisar(txSearch.getText());
		ObservableList<TabelaProduto> dadosTabela = FXCollections.observableArrayList();
		
		for(Produto p : listaProdutos){
			dadosTabela.add(new TabelaProduto(p));
		}
		
		clCodigo.setCellValueFactory(new PropertyValueFactory<>("codigo"));
		clDescricao.setCellValueFactory(new PropertyValueFactory<>("descricao"));
		clCodigoBarras.setCellValueFactory(new PropertyValueFactory<>("codigoBarras"));
		clCategoria.setCellValueFactory(new PropertyValueFactory<>("categoria"));
		clPreco.setCellValueFactory(new PropertyValueFactory<>("preco"));
		
		tabelaProd.setItems(dadosTabela);
    }
    
    public void listarDados(){
    	ProdutoDAO dao = new ProdutoDAO();
		List<Produto> listaProdutos = dao.listar();
		ObservableList<TabelaProduto> dadosTabela = FXCollections.observableArrayList();
		
		for(Produto p : listaProdutos){
			dadosTabela.add(new TabelaProduto(p));
		}
		
		clCodigo.setCellValueFactory(new PropertyValueFactory<>("codigo"));
		clDescricao.setCellValueFactory(new PropertyValueFactory<>("descricao"));
		clCodigoBarras.setCellValueFactory(new PropertyValueFactory<>("codigoBarras"));
		clCategoria.setCellValueFactory(new PropertyValueFactory<>("categoria"));
		clPreco.setCellValueFactory(new PropertyValueFactory<>("preco"));
		
		tabelaProd.setItems(dadosTabela);
    }
    
    @FXML
    void voltar(ActionEvent event) {
    	try{
    		Parent root = FXMLLoader.load(getClass().getResource("/br/com/empresa/view/principal.fxml"));
    		Principal.cena.setRoot(root);
    	}catch(IOException ex){
    		ex.printStackTrace();
    	}
    }
    
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		cbCategoria.getItems().addAll("Bazar",
									  "Casa",
									  "Esportes");
		
	}
	
}
